#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#include<unordered_map>
using namespace std;

int bfs(string star){
	string end="12345678x";
	queue<string> q;
	q.push(star);
	unordered_map<string,int> d;
	d[star]=0;
	int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};
	
	while(!q.empty()){
		auto t=q.front();
		q.pop();
		
		int s=d[t];
		if(t==end)return s;
		
		int k=t.find('x');
		int x=k/3,y=k%3;
		
		for(int i=0;i<4;i++){
			int a=x+dx[i],b=y+dy[i];
			if(a>=0&&a<3&&b>=0&&b<3){
				swap(t[k],t[3*a+b]);
				if(!d.count(t)){
					q.push(t);
					d[t]=s+1;
				}
				swap(t[k],t[3*a+b]);
			}
		}
		
	}
	return -1;
	
}

int main(){
	string star;
	char op[9];
	for(int i=0;i<9;i++){
		cin>>op[i];
		star+=op[i];
	}
	cout<<bfs(star);
	
	return 0;
}
